package py.progweb.sgc.gui.server.service;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.log4j.Logger;

import py.progweb.sgc.gui.client.service.RemoteServiceException;
import py.progweb.sgc.gui.listener.ContextListener;
import py.progweb.sgc.manager.ABMManagerLocal;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * Clase base para todos los RemoteServices
 * @author jtalavera
 *
 */
public class BaseServiceImpl extends RemoteServiceServlet {
	
	Logger logger;
	InitialContext ctx;
	
	public BaseServiceImpl() throws NamingException {
		logger = Logger.getLogger(this.getClass());
		ctx = new InitialContext();
	}

	/**
	 * Retorna el session bean cuyo nombre es pasado por parámetro.
	 * El nombre debe ser el atributo "name" del annotation
	 * Stateless o Stateful. 
	 * 
	 * Ejemplo:
	 * 
	 * @Stateless(name="ABMManager") ...
	 * 
	 * getBean("ABMManager") ...
	 * 
	 * @param beanName
	 * @return
	 * @throws NamingException
	 */
	public Object getBean(String beanName) throws NamingException{		
		logger.debug("Buscando el bean " + beanName);
		return ctx.lookup("java:global/sgc/sgc-ejb/" + beanName);
	}

	public RemoteServiceException manejarError(Exception e) {
		e.printStackTrace();
		
		//logger.error("Ocurrio una excepcion: " + e.getClass().getName() + ": " + e.getMessage() + " causa: " + e.getCause().getMessage());
		logger.error(e.getMessage());
		String message = e.getMessage();
		if (e.getCause() != null){
			message = message + ": " + e.getCause().getMessage();
		}
		if (e.getCause().getCause() != null){
			message = message + ", " + e.getCause().getCause().getMessage();
		}
		return new RemoteServiceException(message);
	}
}
